

package Soligee.decorador;

import java.util.List;


public class PaginacaoListaCincoEmCinco {

    private int numeroDaPagina = 1;
    private int firstResult = 0;
    private int maxResult = 4;
    private int totalPaginas =0 ;
    private List lista;
    private int tamanhoLista;

    //construtor com parâmetros
    public PaginacaoListaCincoEmCinco(List lista){
        this.setLista(lista);
        this.setFirstResult(0); //seta o primeiro first result para 0
        this.setMaxResult(4); //set o primeiro max result para 4
        this.setNumeroDaPagina(1);//seta como pagina inicial a numero
        this.setTamanhoLista(lista.size());
        this.setTotalPaginas(this.calculaTotalPaginas(lista));//seta o total de paginas
       
    }

   public int calculaTotalPaginas(List lista){
         if((this.tamanhoLista % 5)!= 0){
             return (this.tamanhoLista/5)+1;
        }else
          return (this.tamanhoLista/5);
    }

   public List firstPage() {
        this.setNumeroDaPagina(1);
        this.setFirstResult(0);
        this.setMaxResult(5);
        return  this.getLista().subList(this.getFirstResult(),this.getMaxResult());
    }

    public List previousPage() {     
         int auxiliar = (this.getNumeroDaPagina() - 1);
         if(auxiliar == 0){
             return null;
         }else{
             if(auxiliar==1){
                 return this.firstPage();
             }else{
                this.setNumeroDaPagina(auxiliar);
                this.setFirstResult(this.getFirstResult()-5);             
                this.setMaxResult(this.determinaMaxResult());              
                return  this.getLista().subList(this.getFirstResult(),this.getMaxResult());
             }
         }
      }

    public List nextPage() {
      try{
        this.setNumeroDaPagina(this.getNumeroDaPagina()+1);
        this.setFirstResult(this.getFirstResult()+5);
        this.setMaxResult(this.determinaMaxResult());
        return this.getLista().subList(this.getFirstResult(),this.getMaxResult());
      }catch(IndexOutOfBoundsException e) {
          e.getStackTrace();
           return null;
      }
    }

    public List lastPage() {
        this.setNumeroDaPagina(this.getTotalPaginas());
        this.setFirstResult(5*(this.getNumeroDaPagina()-1));
        this.setMaxResult(this.determinaMaxResult());
        return this.getLista().subList(this.getFirstResult(),this.getMaxResult());

    }


    private int determinaMaxResult(){
        int mxResult = 0;
        if(this.getNumeroDaPagina()==this.getTotalPaginas()){
            if((this.getTamanhoLista()%5)==0){
                mxResult = this.getFirstResult()+5;
            }else{
                mxResult = this.getTamanhoLista();
            }
        }else{
                mxResult = this.getFirstResult()+5;
        }
        return mxResult;
    }//fim determina max result





    public int getTamanhoLista() {
        return tamanhoLista;
    }

    public void setTamanhoLista(int tamanhoLista) {
        this.tamanhoLista = tamanhoLista;
    }


    public int getNumeroDaPagina() {
        return numeroDaPagina;
    }


    public void setNumeroDaPagina(int numeroDaPagina) {
        this.numeroDaPagina = numeroDaPagina;
    }

    public int getFirstResult() {
        return firstResult;
    }


    public void setFirstResult(int firstResult) {
        this.firstResult = firstResult;
    }

    public int getMaxResult() {
        return maxResult;
    }

    public void setMaxResult(int maxResult) {
        this.maxResult = maxResult;
    }

    public int getTotalPaginas() {
        return totalPaginas;
    }


    public void setTotalPaginas(int totalPaginas) {
        this.totalPaginas = totalPaginas;
    }   

    public List getLista() {
        return lista;
    }

    public void setLista(List lista) {
        this.lista = lista;
    }


}